console.log("es6 简化方法声明");


const obj = {
    foo(index) {
        if (index > 0) {
            /**
             * 这样声明就依赖了 this 上下文
             */
            this.foo(--index)
            console.log(index);
        }
    }
}

obj.foo(10)

/**
 * 演示因为依赖上下文而导致的
 * 上下文 this 改变而 递归方法调用失败
 */
obj.foo.apply({
    foo() {
        console.log("我不是你想要依赖的上下文对象");
    }
}, [10])

console.log("--------------------->");

const standard = {
    /**
     * function foo() 可以给内部递归调用使用
     */
    foo: function foo(index) {
        if (index > 0) {
            foo(--index)
            console.log(index);
        }
    }
}

standard.foo(10)

console.log("现在上下文this无论怎么切换也不会导致递归异常");
standard.foo.apply({},[10])